Applications may allocate memory dynamically from heap memory pools during execution. More specifically, different threads of a given application may allocate and deallocate portions of heap memory, termed “buffers” herein, as they proceed through execution. Typically, one or more applications, or threads of applications, share the heap, with the various different applications or threads allocating and freeing buffers of different sizes. Additionally, these applications or threads may allocate and free the buffers at different rates.
As many different threads allocate and deallocate buffers from the common heap, the heap may become fragmented, thereby reducing the overall amount of heap memory that is available for allocation to various requesters. Eventually, this fragmentation may lead to reduced application performance, and if allowed to proceed to an extreme, the heap may be exhausted and applications may fail.